package com.qing.demo;

import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;

public class CatFaceDetection {

    static {
        // 加载OpenCV库
//        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        System.loadLibrary("/usr/local/Cellar/opencv/4.12.0/share/opencv4");
    }

    public static void main(String[] args) {
        // 输入图像路径
        String imagePath = "cat/cat1.png";

        // 加载猫脸分类器（需要预先训练好的XML文件）
        String classifierPath = "path/haarcascade_frontalcatface.xml";
        CascadeClassifier catFaceDetector = new CascadeClassifier(classifierPath);

        if (catFaceDetector.empty()) {
            System.err.println("无法加载分类器文件");
            return;
        }

        // 读取图像
        Mat image = Imgcodecs.imread(imagePath);
        if (image.empty()) {
            System.err.println("无法加载图像");
            return;
        }

        // 转换为灰度图像
        Mat grayImage = new Mat();
        Imgproc.cvtColor(image, grayImage, Imgproc.COLOR_BGR2GRAY);

        // 直方图均衡化，增强对比度
        Imgproc.equalizeHist(grayImage, grayImage);

        // 检测猫脸
        MatOfRect catFaces = new MatOfRect();
        catFaceDetector.detectMultiScale(grayImage, catFaces);

        // 在检测到的猫脸周围绘制矩形
        for (Rect rect : catFaces.toArray()) {
            Imgproc.rectangle(image,
                    new Point(rect.x, rect.y),
                    new Point(rect.x + rect.width, rect.y + rect.height),
                    new Scalar(0, 255, 0),  // 绿色
                    3);  // 线宽
        }

        // 保存结果图像
        String outputPath = "out/output_image.jpg";
        Imgcodecs.imwrite(outputPath, image);

        System.out.println("检测完成，共发现 " + catFaces.toArray().length + " 个猫脸");
    }
}
